package com.objects.demo04;

public class Test {
    public static void main(String[] args) {
        System.out.println("研究一些String类重写的 toString 方法");
        /**
         * toString（）方法：将对象以字符串输出
         * Object 默认的toString（） 方法输出的内容是：类名称+用十六进制表示对象内存地址的字符串
         *     public String toString() {
         *         return getClass().getName() + "@" + Integer.toHexString(hashCode());
         *     }
         * Integer.toHexString 方法表示：把无符号整数的值转换为十六进制表示，返回的是字符串
         * 在输出引用类型时，会默认调用toString()方法
         */
        String s = "好好学习";
        System.out.println(s);
        /**
         * 如果 String 没有重写的了 toString，输出结果是 java.lang.String@十六进制的地址
         * 下面证明：String 是重写 toString 方法 输出是自身对象数据
         */
        System.out.println(s.toString()); // 好好学习

        //案例一、 该类没有重写 toString方法
        Goods goods = new Goods();
        // 默认调用 会默认调用toString
        System.out.println(goods); // com.objects.demo04.Goods@5680a178
        System.out.println(goods.toString());// com.objects.demo04.Goods@5680a178
        System.out.println(goods.hashCode());// 哈希值 1451270520，发现：1451270520 转换十六进制是 5680a178
        System.out.println("===========");
        /**
         * 案例二、重写toString（）方法
         */
        Shop shop = new Shop("水果店","卖水果");
        System.out.println(shop); // Shop{name='水果店', cate='卖水果'} 输出引用类型 默认调用 toString() 方法
        System.out.println(shop.toString()); // Shop{name='水果店', cate='卖水果'}
    }
}
